package com.gufe.controller.webSocket.Handler;

import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import org.springframework.stereotype.Component;

//心跳检查机制
@Component
@ChannelHandler.Sharable // 标记为可共享
public class HanderHeartBeat extends ChannelDuplexHandler {


    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        // 判断事件类型是否是 IdleStateEvent（空闲状态事件）
        if (evt instanceof IdleStateEvent) {
            // 将事件对象转换为 IdleStateEvent
            IdleStateEvent event = (IdleStateEvent) evt;

            // 判断事件的空闲状态类型
            if (event.state() == IdleState.READER_IDLE) {
                // 如果是读空闲（READER_IDLE），表示客户端长时间没有发送数据
                System.out.println("心跳超时 " + ctx.channel().remoteAddress());
                // 关闭连接
                ctx.close();
            } else if (event.state() == IdleState.WRITER_IDLE) {
                // 如果是写空闲（WRITER_IDLE），表示服务器长时间没有发送数据
                // 发送心跳包以维持连接
                ctx.writeAndFlush("heartbeat");
            }
        }
    }
}
